package runner

// Version 2：引入 context，支持取消。

import "context"

type Task func(context.Context) error

type Runner struct {
	tasks []Task
}

func New() *Runner {
	return &Runner{tasks: make([]Task, 0)}
}

func (r *Runner) Add(task Task) {
	r.tasks = append(r.tasks, task)
}

func (r *Runner) Run(ctx context.Context) error {
	for _, task := range r.tasks {
		select {
		case <-ctx.Done():
			return ctx.Err()
		default:
		}
		if err := task(ctx); err != nil {
			return err
		}
	}
	return nil
}
